#ifndef __ES_PWM_H__
#define __ES_PWM_H__

#include "stm8s.h"
#include "stm8s_tim1.h"
#include "stm8s_tim2.h"



//定义

//比较器自加周期
#define CC_Cycle 8

/* 计时器预分频值
比较器自加周期CC_Cycle(us)=(1/16)*(Timer_Prescaler+1)
128时自加周期为8us */
#define Timer_Prescaler 127

//TIM2预分频值，需要与Timer_Prescaler一致
#define Timer2_Prescaler TIM2_PRESCALER_128

//电机模式pwm频率
#define Motor_Mode_Frequency 1000

/* 电机模式被除数
精度范围 1000us/8us=125（份)
32000/125=256  (32000是pwm值范围) */
#define Motor_Mode_Divisor 256

//电机模式四舍五入值，该值为 Motor_Mode_Divisor/2
#define Motor_Mode_Rounder 128

/* 舵机模式被除数
精度范围 2000us/8us=250(份)
32000/250=128 (32000是pwm值范围) */
#define Servo_Mode_Divisor 128

//舵机模式四舍五入值，该值为 Servo_Mode_Divisor/2
#define Servo_Mode_Rounder 64

#define pwm_period 0xffff




//通道电平控制
/* 通道号对应GPIO:
ch0-D4 
ch1-A1
ch2-A2
ch3-D1
ch4-C4
ch5-C3 */
#define ch0_H() GPIO_WriteHigh(GPIOD, GPIO_PIN_4)
#define ch0_L() GPIO_WriteLow(GPIOD,GPIO_PIN_4);

#define ch1_H() GPIO_WriteHigh(GPIOA, GPIO_PIN_1)
#define ch1_L() GPIO_WriteLow(GPIOA,GPIO_PIN_1);

#define ch2_H() GPIO_WriteHigh(GPIOA, GPIO_PIN_2)
#define ch2_L() GPIO_WriteLow(GPIOA,GPIO_PIN_2);

#define ch3_H() GPIO_WriteHigh(GPIOD, GPIO_PIN_1)
#define ch3_L() GPIO_WriteLow(GPIOD,GPIO_PIN_1);

#define ch4_H() GPIO_WriteHigh(GPIOC, GPIO_PIN_4)
#define ch4_L() GPIO_WriteLow(GPIOC,GPIO_PIN_4);

#define ch5_H() GPIO_WriteHigh(GPIOC, GPIO_PIN_3)
#define ch5_L() GPIO_WriteLow(GPIOC,GPIO_PIN_3);





typedef enum {
    PWM_MODE_SERVO = 0,
    PWM_MODE_MOTOR = 1
} Pwm_Mode;

//启动通道
void pwm_EnableChannel(u8 ch);

//关闭通道
void pwm_DisableChannel(u8 ch);

/*
初始化pwm通道
ch-通道号
mode-pwm模式 
*/
void pwm_InitChannel(u8 ch, Pwm_Mode mode);

/*
设置pwm通道值
ch-通道号
data-pwm值
*/
void pwm_SetChannel(u8 ch, u16 data);

#endif
